package com.ruoyi.proposal.service;

import com.ruoyi.proposal.domain.Proposal;
import com.ruoyi.proposal.dto.ProposalDTO;
import com.ruoyi.proposal.dto.ProposalQueryDTO;
import com.ruoyi.proposal.vo.ProposalVO;
import com.ruoyi.common.core.page.TableDataInfo;

import java.util.List;

/**
 * 提案服务接口
 * 定义提案相关业务逻辑方法
 */
public interface ProposalService {
    /**
     * 提交提案
     * @param proposalDTO 提案数据传输对象
     */
    void submitProposal(ProposalDTO proposalDTO);

    /**
     * 查询所有提案
     * @param queryDTO 查询条件
     * @return 提案列表
     */
    List<ProposalVO> findAllProposals(ProposalQueryDTO queryDTO);

    /**
     * 分页查询所有提案
     * @param queryDTO 查询条件
     * @return 提案分页数据
     */
    TableDataInfo findProposalList(ProposalQueryDTO queryDTO);

    /**
     * 根据ID查询提案
     * @param id 提案ID
     * @return 提案对象
     */
    ProposalVO findById(Long id);

    /**
     * 根据条件查询提案记录总数
     * @param queryDTO 查询条件
     * @return 记录总数
     */
    int countByCondition(ProposalQueryDTO queryDTO);

    /**
     * 更新提案
     * @param proposalDTO 提案数据传输对象
     */
    void updateProposal(ProposalDTO proposalDTO);

    /**
     * 删除提案
     * @param id 提案ID
     */
    void deleteProposal(Long id);

    /**
     * 查询财务相关提案
     * @param queryDTO 查询条件
     * @return 提案列表
     */
    List<ProposalVO> findFinanceProposals(ProposalQueryDTO queryDTO);

    /**
     * 更新节省金额
     * @param proposalDTO 提案数据传输对象
     */
    void updateSavings(ProposalDTO proposalDTO);

    /**
     * 查询待打分提案
     * @param queryDTO 查询条件
     * @return 提案列表
     */
    List<ProposalVO> findScoreProposals(ProposalQueryDTO queryDTO);

    /**
     * 分页查询待打分提案
     * @param queryDTO 查询条件
     * @return 提案分页数据
     */
    TableDataInfo findScoreProposalList(ProposalQueryDTO queryDTO);

    /**
     * 提交评分
     * @param proposalDTO 提案数据传输对象
     */
    void submitScore(ProposalDTO proposalDTO);
}